package be.groept.ace.cursusplanning.view;

import java.awt.Color;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.GregorianCalendar;
import java.util.Map;

import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JTextArea;

import be.groept.ace.cursusplanning.controller.IOverzichtController;
import be.groept.ace.cursusplanning.controller.OpstartController;
import be.groept.ace.cursusplanning.model.AangebodenCursus;
import be.groept.ace.cursusplanning.model.Cursist;
import be.groept.ace.cursusplanning.model.IElementVanUurroosterOverzicht;

/**
 * 
 * @author Kevin Brigitta
 *
 */

public class LessenroosterOverzichtFrame extends OverzichtFrame {
	
	/**
	 * Constructor voor het opstarten van het "LessenOverzichtFrame"
	 * @param opstartcontroller
	 * @param lessenroosteroverzichtcontroller
	 */
	public LessenroosterOverzichtFrame(OpstartController opstartcontroller, IOverzichtController lessenroosteroverzichtcontroller){
		
		super(opstartcontroller, lessenroosteroverzichtcontroller);
		setTitle("Overzicht lessenrooster(s)");
		
		/**
		 * Tonen van de correcte data in het textveld bij het aanvinken van de checkbox "Iedereen"
		 */
		chkAllePersonen.addItemListener(new ItemListener() {		
			@Override
			public void itemStateChanged(ItemEvent arg0) {
				if (chkAllePersonen.isSelected()){
					String output = "";
					Map<String, AangebodenCursus[]> dataMap = overzichtController.getOutputForAll();
					for (String studentNaam :  dataMap.keySet()) {
						output += studentNaam + " :\n";
						AangebodenCursus[] aangebodenCursussen = dataMap.get(studentNaam);
						for(int i = 0; i < aangebodenCursussen.length; i++) {
							output +=
									"\t" + aangebodenCursussen[i].getCursus() + " : \t"
									+ aangebodenCursussen[i].getTijdsMoment1Dag().getDag() + " : " 
									+ aangebodenCursussen[i].getTijdsMoment1Dag().getBegintijd().get(GregorianCalendar.HOUR_OF_DAY) + ":"
									+ aangebodenCursussen[i].getTijdsMoment1Dag().getBegintijd().get(GregorianCalendar.MINUTE) + " - "
									+ aangebodenCursussen[i].getTijdsMoment1Dag().getEindtijd().get(GregorianCalendar.HOUR_OF_DAY) + ":"
									+ aangebodenCursussen[i].getTijdsMoment1Dag().getEindtijd().get(GregorianCalendar.MINUTE) + "\n"
									+ "\t\tLector : " + aangebodenCursussen[i].getLector() + "\n"
									+ "\t\tLokaal : " + aangebodenCursussen[i].getLokaal() + "\n\n";
						}
					}
					txtOverzicht.setText(output);
				}
			}
		});

		/**
		 * Tonen van de correcte data in het textveld bij het selecteren van een cursist
		 */
		cmbBetreffendePersonen.addItemListener(new ItemListener() {
			@Override
			public void itemStateChanged(ItemEvent arg0) {
				if (!chkAllePersonen.isSelected()) {
					String output = "";
					AangebodenCursus[] aangebodenCursussen = overzichtController.getOutputForSingle((IElementVanUurroosterOverzicht)cmbBetreffendePersonen.getSelectedItem());
					for(int i = 0; i < aangebodenCursussen.length; i++) {
						output += 
								aangebodenCursussen[i].getCursus() + " : \t"
										+ aangebodenCursussen[i].getTijdsMoment1Dag().getDag() + " : " 
										+ aangebodenCursussen[i].getTijdsMoment1Dag().getBegintijd().get(GregorianCalendar.HOUR_OF_DAY) + ":"
										+ aangebodenCursussen[i].getTijdsMoment1Dag().getBegintijd().get(GregorianCalendar.MINUTE) + " - "
										+ aangebodenCursussen[i].getTijdsMoment1Dag().getEindtijd().get(GregorianCalendar.HOUR_OF_DAY) + ":"
										+ aangebodenCursussen[i].getTijdsMoment1Dag().getEindtijd().get(GregorianCalendar.MINUTE) + "\n"
										+ "\tLector : " + aangebodenCursussen[i].getLector() + "\n"
										+ "\tLokaal : " + aangebodenCursussen[i].getLokaal() + "\n\n";
					}
					
					txtOverzicht.setText(output);
					}
				}
			});
		}
	
	/**
	 * Overridden functie voor het weergeven van een label dat een titel geeft aan de combobox voor het selecteren van een cursist
	 */
	@Override
	protected void toonBetreffendePersonenLabel() {
		lblBetreffendePersonen = new JLabel("Selecteer een cursist");
		lblBetreffendePersonen.setBounds(20, 20, 300, 30);
	}
	
	/**
	 * Overridden functie voor het weergeven van een combobox, dat de gegevens bevat voor het selecteren van een cursist
	 */
	@Override
	protected void toonBetreffendePersonenCombobox() {
		cmbBetreffendePersonen = new JComboBox(overzichtController.getElements());
		cmbBetreffendePersonen.setBounds(20, 50, 300, 30);
	}
	
	/**
	 * Overridden functie voor het weergeven van een checkbox, dat alle cursisten weergeeft wanneer geselecteerd
	 */
	@Override
	protected void toonAllePersonenCheckBox() {
	chkAllePersonen = new JCheckBox();
	chkAllePersonen.setBackground(Color.YELLOW);
	chkAllePersonen.setBounds(330, 50, 150, 30);
	chkAllePersonen.setText("Alle cursisten");
	}

	/**
	 * Overridden functie voor het weergeven van een label dat een titel geeft aan het textveld voor het weergeven van het lessenrooster
	 */
	@Override
	protected void toonOverzichtLabel() {
		lblOverzicht = new JLabel("Lessenrooster(s)");
		lblOverzicht.setBounds(20, 100, 300, 30);
	}
	
	/**
	 * Overridden functie voor het weergeven van het textveld dat het lessenrooster bevat
	 */
	@Override
	protected void toonOverzichtText() {
		txtOverzicht = new JTextArea();
		txtOverzicht.setBounds(20, 130, 600, 500);
	}
	
}
